The present invention relates to the provision of software components to client devices such as mobile telephones, personal digital assistants, laptop computers and the like. The invention has particular, although not exclusive relevance to the dynamic component-based delivery, assembly and disposal, in real-time, of software application modules on such mobile computing devices.
There is currently great interest in so-called ‘smart phones’, mobile electronic devices that offer combinations of once separate and distinct functionalities, such as telephony, email, electronic diary etc, combined within a single device. The need for such devices to be portable requires them to be light weight, relatively small and battery powered. This places stringent limits on both the device itself, for example in terms of processing power and data storage capacity, and on its connectivity, as in network speed and capacity.
One of the inventors has previously proposed (in GB 2370658) to provide Java based components that are instantiated in the memory of a server, serialised and then sent across the network as a serialised in-memory object directly into the memory of the mobile computing device to be run by a Java Virtual Machine on the device. This system offers the advantage that components for software applications do not need to be stored in the mobile device and instead can be downloaded and used when needed. However, this earlier system suffered from a number of problems that made the system unsuitable for a practical implementation. These problems include:
1. the component objects had to be instantiated in memory and then transferred to the client device via a Remote Method Invocation (RMI), which is not secure and exposes the server/mobile computing device to attack as it allows direct access to the memory in the server/mobile computing device;
2. the data transmitted between the mobile device and the server is relatively large due to the need to transmit memory instantiated objects. In particular, the serialisation process not only serialises the given in-memory object but also copies and serialises any other in-memory objects that are used by the target component. For example, a visual component will not only have its own logic serialised, but also the logic that displays and handles its GUI, as well as any other objects it was using at the moment of serialisation. The result in an object that is in fact many times bigger than the original component, and this object now has to be transported across a network to the calling client;
3. the system did not scale as components had to be one of four different types, with each type being described by a single fixed size descriptor object specific to that type; and
4. additionally, instantiation of any object is a CPU-intensive and memory-intensive process. A server receiving 1000 requests per minute would very quickly run out of memory and grind to a halt.